home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
05 Programming
/
SHLRAM.SDA
/
SHELLSTR.A
< prev
next >
Wrap
Text File
|
2019-04-13
|
4KB
|
261 lines
;
; SHELLRAM
;
; ┬Y: ┴DRIAN ╨EPPER
; ╘ORONTO, ╧NTARIO
;
; BASED ON, BUT HEAVILY MODIFIED FROM
; THE ╨RO-╠INE/╙PINNAKER
; ├ ╨╧╫┼╥/╨╧╫┼╥ ├ SHELL FOR THE
; ├OMMODORE 64 HOME COMPUTER.
;
; ╘HE SHELL WAS MODIFIED TO REDUCE
; THE SIZE OF THE CODE, AND ARRANGE
; THINGS SO MEMORY PAGE 22 (HEX $16)
; WILL BE FREE FOR USE AS A "╥┴═DISK
; ╔NTERFACE ╨AGE", FOR USE WITH THE
; ├OMMODORE 1764 256╦ ╥┴═ EXPANDER
; FOR THE ├OMMODORE 64
;
; ╘HIS (BASICALLY) ALLOWS ALL PROGRAMS
; DESIGNED TO RUN UNDER THE SHELL TO
; OPERATE WITH THE ╥┴═ DISK
;
;
; SHELLSTR.A
;
; ROUTINES FOR DOING
; STRING MANIPULATION
;
; USE OF THESE ROUTINES ACCOUNTS FOR A
; LOT OF THE SPACE SAVING
;
;
.REF WRKDEV
;
; KERNAL ROUTINES, ETC
;
.REF SETLFS
.REF SETNAM
.REF OPEN
.REF CHKIN
.REF CLRCHN
.REF CHRIN
.REF CHROUT
;
;
; SHELLSTR - UTILITY ROUTINES TO WORK
; WITH A ZERO-TERMINATED "STRING
; ACCUMULATOR" AT A FIXED ADDRESS
;
;
.REF STRAC ;; SAME AS PRFBUF, REMEMBER
.REF KWRKFIL
.REF KSYSFIL
;
.DEF STRCLR
.DEF STREND
.DEF STRLOAD
.DEF STRAPND
.DEF STREQ
.DEF STROPEN
.DEF STRFOPN
.DEF STRECHN
.DEF STRETST
.DEF STROUT
.DEF STRBOUT
;
;
; STRCLR - ZERO WORK STRING BUFFER
; INPUT REGS: NONE
; A IS ALWAYS SET TO ZERO
;
STRCLR LDA #0
STA STRAC
RTS
;
;
; STREND - SET X TO LENGTH OF STRAC
; X SHOULD BE SET BEFORE CALL
; (IN CASE MULTIPLE STRINGS ARE IN
; STRAC)
;
; OUTPUT: X - LENGTH OF STRAC
;
STREND LDA STRAC,X
INX
CMP #0
BNE STREND
DEX ; POINT BACK AT END
RTS
;
;
; STRAPND - COPY STRING AT (X,Y) TO
; END OF STRAC
;
; OUTPUT: X NEW LENGTH OF STRAC
; Y LENGTH OF STRING (X,Y)+1
; A ALWAYS 0
; $57,$58 USED TO STORE X,Y
;
STRAPND STX $57
STY $58
LDX #0
JSR STREND
LDY #0
T0100B LDA ($57),Y
INY
STA STRAC,X
INX
CMP #0
BNE T0100B
;JSR STRBOUT
DEX ; POINT AT '\0' TERMINATOR
;LDA #'_
;JSR CHROUT
;LDA #$0D
;JSR CHROUT
RTS
;
;
; STRLOAD - COPY STRING AT (X,Y) TO
; STRAC
;
; OUTPUT: X NEW LENGTH OF STRAC
; Y LENGTH OF STRING (X,Y)+1
; A ALWAYS 0
; $57,$58 USED TO STORE X,Y
;
STRLOAD JSR STRCLR
JMP STRAPND ;; AND RETURN
;
;
; STREQ - COMPARE STRING AT (X,Y) TO
; STRAC FOR EQUALITY
;
; OUTPUT:
; Z CC - EQUAL/NOT
; X - UNCHANGED
; Y - INDEX OF DIFFERING CHAR
; A - CHAR OF (X,Y) THAT DIFFERED (OR '\0')
; $57,$58 - X,Y
;
STREQ STX $57
STY $58
LDY #0
T0200B LDA ($57),Y
CMP STRAC,Y
BNE T0210F ;; RETURN NOT EQUAL
INY
CMP #0
BNE T0200B ;; OR FALL THROUGH, RETURN EQUAL
T0210F RTS ;; EQUAL
;
;
; STROPEN - OPEN STRAC
;
; A,X,Y ARE USED AS A CALL TO SETLFS
; STRAC IS ASSUMED AS A '\0' TERMINATED
; STRING, AND USED FOR CALL TO SETNAM
;
; ALL REGISTERS PLUS STRAC SHOULD BE
; CONSIDERED SCRATCHED
;
STROPEN JSR SETLFS
LDX #0
JSR STREND
TXA ;; LENGTH OF STRAC IN A
LDX #<STRAC
LDY #>STRAC ;; SETUP FOR SETNAM
JSR SETNAM
JMP OPEN ;; AND RETURN, WITH CARRY
;
;
; STRFOPN - OPEN STRAC AS A FILE
;
; A,X,Y ARE USED AS A CALL TO SETLFS
; STRAC IS ASSUMED AS A '\0' TERMINATED
; STRING, AND USED FOR CALL TO SETNAM
;
; IF OPEN FAILS, AN ERROR MESSAGE IS
; COPIED TO STRAC, AND CARRY IS SET
;
; ALL REGISTERS PLUS STRAC SHOULD BE
; CONSIDERED SCRATCHED
;
STRFOPN STX SAVDEV
JSR STROPEN
LDX SAVDEV
JMP STRECHN
SAVDEV .BSS 1
;
;
; STRECHN - READ ERROR CHANNEL FOR DEVICE
; GIVEN IN X
;
; REPLACES STRAC WITH ERROR CHANNEL LINE
;
; ERROR LINE WON'T BE PRINTED, THOUGH
; CARRY WILL BE SET IF ERROR LINE IS NON-ZERO
;
STRECHN LDA #<KWRKFIL
CPX WRKDEV
BEQ T0595F
LDA #<KSYSFIL
T0595F TAX
JSR CHKIN
JSR STRGET
JMP STRETST
;
;
; STRGET - READ A LINE FROM CURRENT
; CHKIN FILE,
; THEN DO A CLRCHN
;
STRGET LDY #0
T0700B JSR CHRIN
STA STRAC,Y
INY
BCS T0710F
CMP #$0D
BNE T0700B
; SHOULD CHECK EOF
T0710F LDA #0
STA STRAC,Y
JMP CLRCHN ;; AND RETURN
;
;
; STRETST - SET CARRY IF NON-ZERO ERROR
;
STRETST LDA STRAC ;; SET CARRY IF NON-ZERO ERROR
CMP #'0
BNE T0810F
LDA STRAC+1
CMP #'0
CLC ;; ASSUME GOOD
BEQ T0820F
T0810F SEC ;; ERROR RETURN
T0820F RTS ;; ERROR RETURN
;
;
;
; STROUT, STRBOUT
; STROUT OUTPUTS STRING AT (X,Y),
; USING $57,$58 AS POINTER
;
; STRBOUT CALLS STROUT WITH STRAC
;
; ALL REGISTERS ARE SCRATCHED
;
STRBOUT LDX #<STRAC
LDY #>STRAC
STROUT STX $57
STY $58
LDY #0
T0900B LDA ($57),Y
BEQ T0910F
JSR CHROUT
INY
BNE T0900B
T0910F RTS